package com.zhisheng.day10_tlias.service.impl;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhisheng.day10_tlias.anno.MyOperateLogBJ;
import com.zhisheng.day10_tlias.dto.EmpQueryDto;
import com.zhisheng.day10_tlias.entry.Emp;
import com.zhisheng.day10_tlias.mapper.EmpMapper;
import com.zhisheng.day10_tlias.service.EmpService;
import com.zhisheng.day10_tlias.utils.MyJwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Service
public class EmpSerImpl implements EmpService {

    @Autowired
    private EmpMapper empMapper;

    @Autowired
    private MyJwtUtils myJwtUtils;

    // 分页查询 写一个方法即可 ,这个方法要返回controller最终希望得到的数据结构
    public Map<String,Object> findPageByCondition(EmpQueryDto dto){
        // 分别调用 mapper层获取总条数和当前这一页的集合,并存入到map中交给controller
        Map<String,Object> map = new HashMap<>();
        // 这两行调用的是手动分页相关的内容
        //Long l = empMapper.selectCountByCondition(dto);
        //List<Emp> emps = empMapper.selectListByCondition(dto);
        // 使用mybatis的分页插件分页
        // 1: 调用分页查询的静态方法
        PageHelper.startPage(dto.getPage(),dto.getPageSize());
        // 2: 接下来只要调用mapper查询数据,自动的给mapper的sql后面添加limit关键字,且自动计算起始索引,且自动查询满足条件的总数量,会使用动态代理,把我们原来返回的对象,替换成 一个 Page对象(是ArrayList的子类)
        List<Emp> page = empMapper.selectListByMybatisCondition(dto);
        //List<Emp> page2 = empMapper.selectListByMybatisCondition(dto);
        // 3: 在page内部就可以找到总条数和 存数据的集合
        PageInfo<Emp> info = PageInfo.of(page);
        map.put("total",info.getTotal());
        map.put("rows",info.getList());
        return map;
    }

    @Override
    @MyOperateLogBJ
    public int delByIds(List<Integer> ids) {
        return empMapper.delByIds(ids);
    }

    @Override
    @MyOperateLogBJ
    public int insertEmp(Emp emp) {
        // 补上添加时间和更新时间
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        return empMapper.insertEmp(emp);
    }

    @Override
    public Emp findEmpById(Integer id) {
        return empMapper.findEmpById(id);
    }

    @Override
    @MyOperateLogBJ
    public int updateEmp(Emp emp) {
        // 补上更新时间
        emp.setUpdateTime(LocalDateTime.now());
        return empMapper.updateEmp(emp);
    }

    @Override
    public String selectEmpByUsernameAndPassword(Emp emp) {
        // 根据用户名和密码查询数据库,
        Emp res = empMapper.selectEmpByUsername(emp.getUsername());
        // 如果res为null,说明用户名不存在,如果不为null,说明用户名正确,继续比较密码
        if(res == null){
            return "登陆失败,用户名不对呀!";
        }
        if(res.getPassword().equals(emp.getPassword())){
            Map<String,Object> map = new HashMap<>();
            map.put("id",res.getId());
            map.put("name",res.getName());
            String token = myJwtUtils.createToken(map);
            return token;
        }
        return "登陆失败,密码错误!";
    }

    @Override
    @MyOperateLogBJ
    public int delByDeptId(Integer id) {

        return empMapper.delByDeptId(id);
    }

}
